import { useLocationStore, useLoginStore, useMemberStore, usePhoneStore } from '@/stores'
import clearData from './component'
import { MyShowModal, PageSkip, Toast } from './tools'
import { isUserOneLoginApi } from '@/services/login'
import type { isLoginType } from '@/types/component'
import { ref } from 'vue'

/** 更新时调用版本更新 */
export const autoUpdate = () => {
  if (wx.canIUse('getUpdateManager')) {
    const updateManager = wx.getUpdateManager()
    console.log('更新时调用版本更新', updateManager)
    updateManager.onCheckForUpdate((res) => {
      if (res.hasUpdate) {
        uni.clearStorageSync()
        updateManager.onUpdateReady(() => {
          MyShowModal('新版本已经准备好，是否重启应用？', '更新提示').then((res) => {
            if (res.confirm) {
              updateManager.applyUpdate()
            } else {
              MyShowModal(
                '当前小程序版本过低，无法使用该功能，请升级到最新小程序版本后重试。',
                '提示',
              ).then((success) => {
                if (success.confirm) {
                  updateManager.applyUpdate()
                }
              })
            }
          })
        })
        updateManager.onUpdateFailed(() => {
          MyShowModal('新版本已经上线啦~，请您删除当前小程序，重新搜索打开哟~', '已经有新版本了哟~')
        })
      } else {
        // 没有新版本
        // wx.showToast({
        //   title: '当前已经是最新版本',
        //   icon: 'none',
        // })
      }
    })
  } else {
    wx.showModal({
      title: '提示',
      content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。',
    })
  }
}
/** 小程序启动的时候获取用户信息 */
export const getUserInfo = () => {
  const loginStore = useLoginStore()
  const memberStore = useMemberStore()
  const locationStore = useLocationStore()
  return new Promise((resolve, reject) => {
    uni.login({
      success: async (success: UniApp.LoginRes) => {
        try {
          const res = await isUserOneLoginApi({
            weChatCode: success.code,
            cityName: locationStore.location?.cityName,
          })
          console.log('小程序启动的时候获取用户信息', res)
          const isLoginParam = <isLoginType>{
            isType: res.code === 205 ? false : true,
            openId: res.data && res.data.openId ? res.data.openId : res.data.client.openId,
            unionId: res.data && res.data.unionId ? res.data.unionId : res.data.client.unionId,
          }
          loginStore.setIsLogin(isLoginParam)
          console.log('=================loginStore', memberStore.token)
          if (res.code === 205) {
            clearData('user')
          } else if (res.code === 200 && memberStore.token) {
            console.log(' memberStore.token===================')
            memberStore.token = res.data?.accessToken
            const userInfo = {
              birthday: res.data?.client?.birthday,
              email: res.data?.client?.email,
              headImg: res.data?.client?.headImg,
              id: res.data?.client?.id,
              mobile: res.data?.client?.mobile,
              nickName: res.data?.client?.nickName,
              openId: res.data?.client?.openId,
              sex: res.data?.client?.sex,
              unionId: res.data?.client?.unionId,
            }
            memberStore.setUserInfo(userInfo)
          }
          resolve(res)
        } catch (error) {
          reject(error)
        }
      },
      fail: () => {
        reject()
      },
    })
  })
}
/** 用户定位授权的时候，发起授权请求 */
export const getAuthorize = () => {
  return new Promise((resolve, reject) => {
    uni.getSetting({
      success: (res) => {
        console.log('用户定位授权的时候，发起授权请求')
        const authSetting = res.authSetting
        const isAuthorized = authSetting['scope.userLocation']

        if (isAuthorized) {
          resolve(res)
        } else if (isAuthorized === false) {
          uni.showModal({
            title: '您未开启地理位置授权',
            content: '请在系统设置中打开位置授权并且重新进入小程序，以便我们为您提供更好的服务',
            success: (modalRes) => {
              if (modalRes.confirm) {
                uni.openSetting({
                  success: () => {
                    // 用户可以在设置页面更改权限后返回
                    console.log('用户已前往设置页面')
                  },
                  fail: () => {
                    console.error('打开设置页面失败')
                    reject('打开设置页面失败')
                  },
                })
              } else {
                // 用户点击了取消
                console.log('用户取消了设置')
                reject('用户取消了设置')
              }
            },
          })
        } else {
          // 如果用户从未授权过，可以引导用户去设置
          // uni.showModal({
          //   title: '地理位置授权',
          //   content: '需要您的地理位置授权，请前往设置',
          //   success: (modalRes) => {
          //     if (modalRes.confirm) {
          //       uni.openSetting()
          //     }
          //   },
          // })
          reject('用户尚未授权')
        }
      },
      fail: (err) => {
        console.error('获取设置失败', err)
        reject('获取设置失败')
      },
    })
  })
}
/** 获取登录设备信息、获取环境、获取右上胶囊距离 */
export const getPhoneInfo = () => {
  const env: 'develop' | 'trial' | 'release' = uni.getAccountInfoSync().miniProgram.envVersion
  // 线上关闭 打印
  if (env === 'release') {
    console.log = () => {}
  }
  const phoneStore = usePhoneStore()
  const { deviceType, deviceId } = uni.getSystemInfoSync() // 获取登录设备信息
  const { top, left, right, bottom } = uni.getMenuButtonBoundingClientRect() // 头部导航栏高度
  if (env !== phoneStore.phoneInfo?.env) {
    uni.clearStorageSync()
  }
  const phoneInfo = ref({ deviceType, deviceId, top, left, right, bottom, env })
  phoneStore.setPhoneInfo(phoneInfo.value)
}
/** 获取字体 */
export const getFont = () => {
  uni.loadFontFace({
    global: true,
    family: 'Rowdies',
    source: 'url("https://yuefanpai.oss-cn-hangzhou.aliyuncs.com/Rowdies-Regular.ttf")',
    complete: function (res) {
      // console.log('插入字体')
      // console.log(res)
    },
    success: function (res) {
      // console.log('成功')
      // console.log(res)
    },
    fail: function (res) {
      // console.log('失败')
      // console.log(res)
    },
  })
}
